#pragma once

#include <cstdint>
#include <vector>
#include <GL/glew.h>

namespace teflon
{
    struct BufferLayoutElement
    {
        uint32_t location;
        uint32_t size;
    };

    struct BufferLayout
    {
        std::vector<BufferLayoutElement> layout;

    };

    class VertexBuffer
    {

    };

    class IndexBuffer
    {
    private:
        GLuint ibo = -1;

    public:
        IndexBuffer();

        void SetData(const std::vector<uint16_t>& data);
        void SetData(const uint16_t* data, uint32_t size);

        void Bind();
        void Unbind();
    };

    class UniformBuffer
    {
    private:
        GLuint ubo = -1;

    public:
        UniformBuffer();
        
        template<typename T>
        void SetData(const T& data);

        void Bind();
        void Unbind();
    };

}
